#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <cstdlib>
#include<sys/types.h>
#include<sys/wait.h>

using namespace std;

void handler(int sig)
{
    cout << "子进程退出，收到信号：" << sig << endl;
    pid_t id ;
    while((id=waitpid(-1,NULL,WNOHANG))>0)
    {
        cout<<"回收一个子进程"<<endl;   
    }
}

int main()
{   
    // signal(SIGCHLD,SIG_IGN);
    // if(fork()==0)
    // {
    //     cout << "子进程pid：" << getpid() << endl;
    //     sleep(5);
    //     exit(0);
    // }

    // while(1)
    // {
    //     cout<<"父进程运行中.........."<<endl;
    //     sleep(1);
    // }

    //---------------------------------------
    // signal(SIGCHLD, handler);

    // pid_t id;
    // for (int i = 0; i < 5; i++)
    // {
    //     sleep(1);
    //     if ((id = fork()) == 0)
    //     {
    //         cout << "子进程pid：" << getpid() << endl;
    //         exit(1);
    //     }

    // }

//---------------------------------------

    signal(SIGCHLD, handler);

    if(fork()==0)
    {
        cout << "子进程pid：" << getpid() << endl;
        sleep(20);
        exit(0);
    }

    while (1)
        sleep(5);
    return 0;
}